#include "gtkseparatormenuitem.h"
#include "gtksettings.h"
#include "gtkstock.h"
+#include "gtktrashmonitor.h"
#include "gtktreeselection.h"
#include "gtktreednd.h"
#include "gtktypebuiltins.h"
#define DO_NOT_COMPILE 0
struct _GtkPlacesSidebar {
- GtkScrolledWindow parent;
- GtkTreeView *tree_view;
- GtkCellRenderer *eject_icon_cell_renderer;
- char *uri;
- GtkListStore *store;
- GtkBookmarksManager *bookmarks_manager;
- GVolumeMonitor *volume_monitor;
+ GtkScrolledWindow parent;
+
+ GtkTreeView *tree_view;
+ GtkCellRenderer *eject_icon_cell_renderer;
+ char *uri;
+ GtkListStore *store;
+ GtkBookmarksManager *bookmarks_manager;
+ GVolumeMonitor *volume_monitor;
+ GtkTrashMonitor *trash_monitor;
+
+ gulong trash_monitor_changed_id;
gboolean devices_header_added;
gboolean bookmarks_header_added;
char *hostname;
guint show_desktop : 1;
- guint show_trash : 1;
- guint trash_is_full : 1;
guint accept_uri_drops : 1;
};
#define ICON_NAME_FILESYSTEM "drive-harddisk-symbolic"
#define ICON_NAME_EJECT "media-eject-symbolic"
#define ICON_NAME_NETWORK "network-workgroup-symbolic"
-#define ICON_NAME_TRASH "user-trash-symbolic"
-#define ICON_NAME_TRASH_FULL "user-trash-full-symbolic"
#define ICON_NAME_FOLDER_DESKTOP "user-desktop"
#define ICON_NAME_FOLDER_DOCUMENTS "folder-documents-symbolic"
/* XDG directories */
add_special_dirs (sidebar);
- if (sidebar->show_trash) {
- mount_uri = "trash:///"; /* No need to strdup */
- icon = g_themed_icon_new (sidebar->trash_is_full ? ICON_NAME_TRASH_FULL : ICON_NAME_TRASH);
- add_place (sidebar, PLACES_BUILT_IN,
- SECTION_COMPUTER,
- _("Trash"), icon, mount_uri,
- NULL, NULL, NULL, 0,
- _("Open the trash"));
- g_object_unref (icon);
- }
+ /* Trash */
+ mount_uri = "trash:///"; /* No need to strdup */
+ icon = _gtk_trash_monitor_get_icon (sidebar->trash_monitor);
+ add_place (sidebar, PLACES_BUILT_IN,
+ SECTION_COMPUTER,
+ _("Trash"), icon, mount_uri,
+ NULL, NULL, NULL, 0,
+ _("Open the trash"));
+ g_object_unref (icon);
/* Application-side shortcuts */
add_application_shortcuts (sidebar);
NULL);
}
+static void
+trash_monitor_trash_state_changed_cb (GtkTrashMonitor *monitor,
+ GtkPlacesSidebar *sidebar)
+{
+ update_places (sidebar);
+}
+
static void
gtk_places_sidebar_init (GtkPlacesSidebar *sidebar)
sidebar->bookmarks_manager = _gtk_bookmarks_manager_new (bookmarks_changed_cb, sidebar);
+ sidebar->trash_monitor = _gtk_trash_monitor_get ();
+ sidebar->trash_monitor_changed_id = g_signal_connect (sidebar->trash_monitor, "trash-state-changed",
+ G_CALLBACK (trash_monitor_trash_state_changed_cb), sidebar);
+
sidebar->shortcuts = NULL;
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sidebar),
sidebar->popup_menu = NULL;
}
+ if (sidebar->trash_monitor) {
+ g_signal_handler_disconnect (sidebar->trash_monitor, sidebar->trash_monitor_changed_id);
+ sidebar->trash_monitor_changed_id = 0;
+ g_clear_object (&sidebar->trash_monitor);
+ }
+
g_clear_object (&sidebar->store);
g_slist_free_full (sidebar->shortcuts, g_object_unref);
update_places (sidebar);
}
-void
-gtk_places_sidebar_set_show_trash (GtkPlacesSidebar *sidebar, gboolean show_trash)
-{
- g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar));
-
- sidebar->show_trash = !!show_trash;
- update_places (sidebar);
-}
-
-void
-gtk_places_sidebar_set_trash_is_full (GtkPlacesSidebar *sidebar, gboolean is_full)
-{
- g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar));
-
- sidebar->trash_is_full = !!is_full;
- update_places (sidebar);
-}
-
void
gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops)
{